let mongoose = require('mongoose');
let bcrypt = require('bcrypt-nodejs');
let config = require('config');

let schema = module.exports = new mongoose.Schema({
    nickname: { // 昵称
        type: String
    },
    password: String, // 用户密码
    avatar: String, // 用户头像
    name: String, // 用户姓名
    sex: Number, // 性别
    email: {
        type: String
    }, //email
    cellphone: {
        type: String
    }, // 手机号
    company: String, // 公司名称
    job: String, // 职位
    bank: String, // 开户银行名称
    accountName: String, // 开户姓名
    bankCardNo: String, // 银行卡号
    accountCity: String, // 开户城市
    bankCardPic: String, // 银行卡照片
    isValid: {
        type: Boolean,
        default: false
    }, // 用户是否验证通过
    authorities: [{
        type: String,
        enum: ['admin', 'login', 'signIn'],
        default: 'login'
    }], // 用户权限 admin 管理员 login 普通用户,signIn 签到管理用户
    role: { // admin 用户有用户管理权限
        type: String,
        // default: 'admin'
    },
    kind: { // 用户的类型,'admin': 管理平台用户 'official': 官网平台用户
        type: String,
        default: 'admin'
    },
    groups: [{ // 所属的分组
        type: mongoose.Schema.Types.ObjectId,
        ref: 'Group'
    }],
    originalWechatUser: { // store original wechat user before merger two user info
        type: mongoose.Schema.Types.ObjectId,
        ref: 'User'
    },
    enterpriseColumns: [{ // 企业专栏
        type: mongoose.Schema.Types.ObjectId,
        ref: 'EnterpriseColumn'
    }],
    tags: [{ // 用户标签
        title: String
    }],
    isDelete: {
        type: Boolean,
        default: false
    }, // 是否删除
    creator: {
        type: mongoose.Schema.Types.ObjectId,
        ref: 'User'
    }, // 创建者
    updateUser: {
        type: mongoose.Schema.Types.ObjectId,
        ref: 'User'
    }, // 最后一次更新的用户
    deleteUser: {
        type: mongoose.Schema.Types.ObjectId,
        ref: 'User'
    }, // 删除该数据的用户
    createTime: {type: Date, default: Date.now}, // 创建时间
    updateTime: {type: Date, default: Date.now}, // 最后修改时间
    deleteTime: Date, // 删除时间
    //-------------wechat---------------
    openid: String,
    province: String,
    city: String,
    country: String,
    headimgurl: String,
    privilege: [String],
    unionid: String,
    //-----------------------------------
    from: String, // 用户的来源,wechat, website
});

schema.pre('save', function (next) {
    let self = this;
    let salt = bcrypt.genSaltSync(config.bcrypt.rounds);
    if (!self.isModified('password')) return next();
    bcrypt.hash(self.password, salt, null, function (err, hash) {
        if (err) return next(err);
        self.password = hash;
        next();
    });
});

schema.methods.comparePassword = function (candidatePassword, cb) {
    if (!this.password) {
        cb(null, false);
        return;
    }
    bcrypt.compare(candidatePassword, this.password, function (err, isMatch) {
        if (err) return cb(err);
        cb(null, isMatch);
    });
};

if (!schema.options.toJSON) schema.options.toJSON = {};
schema.options.toJSON.transform = function (doc, ret) {
    delete ret.password;
};
